package com.gdust.gkyx.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gdust.gkyx.model.product.SkuInfo;
import com.gdust.gkyx.vo.product.SkuInfoQueryVo;
import com.gdust.gkyx.vo.product.SkuInfoVo;
import com.gdust.gkyx.vo.product.SkuStockLockVo;

import java.util.List;

/**
 * ClassName: SkuInfoService
 * Package: com.gdust.gkyx.product.service
 * Description:sku信息 服务类
 *
 * @Author syun
 * @Create 2025/1/25 9:29
 * @Version 1.0
 */
public interface SkuInfoService extends IService<SkuInfo> {
    /**
     * //sku列表
     * @param pageParam 分页对象
     * @param skuInfoQueryVo 分页条件
     * @return
     */
    IPage<SkuInfo> selectPageSkuInfo(Page<SkuInfo> pageParam, SkuInfoQueryVo skuInfoQueryVo);

    /**
     * //添加商品sku信息
     * @param skuInfoVo sku信息VO对象
     */
    void saveSkuInfo(SkuInfoVo skuInfoVo);

    /**
     * //获取sku信息
     * @param id
     * @return
     */
    SkuInfoVo getSkuInfo(Long id);


    /**
     * //修改sku
     * @param skuInfoVo sku信息VO对象
     */
    void updateSkuInfo(SkuInfoVo skuInfoVo);

    /**
     * 商品审核
     * @param skuId
     * @param status 审核状态：0->未审核；1->审核通过
     */
    void check(Long skuId, Integer status);

    /**
     * 商品上下架
     * @param skuId
     * @param status 上架状态：0->下架；1->上架
     */
    void publish(Long skuId, Integer status);

    /**
     * 新人专享
     * @param skuId
     * @param status
     */
    void isNewPerson(Long skuId, Integer status);

    List<SkuInfo> findSkuInfoList(List<Long> skuIdList);

    List<SkuInfo> findSkuInfoByKeyword(String keyword);

    //获取新人专享商品
    List<SkuInfo> findNewPersonSkuInfoList();


    //根据skuId获取sku信息
    SkuInfoVo getSkuInfoVo(Long skuId);

    //验证和锁定库存
    Boolean checkAndLock(List<SkuStockLockVo> skuStockLockVoList, String orderNo);

    //扣减库存成功，更新订单状态
    void minusStock(String orderNo);
}
